#!/bin/sh
### filename: dmenu_genrealpath
### 功能：无参数直接运行 → 生成所有可执行文件的绝对真实路径缓存
### 缓存位置：~/.cache/dmenu_genrealpath_cache
### 编辑下方"自定义PATH"添加/删除目录

# -------------------------- 自定义PATH（手动编辑这里添加你的路径） --------------------------
# 格式：用冒号分隔，支持~（会自动解析为家目录）
CUSTOM_PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin:~/Downloads/zig-x86_64-linux-0.16.0-dev.464+df1909900:~/Downloads/bun-linux-x64:~/Downloads/odin/odin-linux-amd64-nightly+2025-09-08:~/Downloads/nim-2.2.4/bin"

# -------------------------- 核心逻辑：生成缓存 --------------------------
# 1. 解析PATH中的~为真实家目录
RESOLVED_PATH=$(echo "$CUSTOM_PATH" | sed "s|~|$HOME|g")

# 2. 缓存文件位置
CACHE_FILE="$HOME/.cache/dmenu_genrealpath_cache"

# 3. 创建缓存目录（如果不存在）
[ ! -d "$(dirname "$CACHE_FILE")" ] && mkdir -p "$(dirname "$CACHE_FILE")"

# 4. 生成绝对真实路径缓存（遍历PATH → 筛选可执行文件 → 解析符号链接 → 去重排序）
echo "$RESOLVED_PATH" | tr ':' '\n' | while read -r dir; do
    # 跳过空目录或不存在的目录
    [ -z "$dir" ] || [ ! -d "$dir" ] && continue
    
    # 遍历目录内所有可执行文件（仅文件，非目录，可执行）
    find "$dir" -maxdepth 1 -type f -executable 2>/dev/null | while read -r exe; do
        # 输出绝对真实路径（解决符号链接问题）
        realpath "$exe"
    done
done | sort -u > "$CACHE_FILE"  # 去重并写入缓存

# （可选）取消注释下方行，运行时显示缓存生成信息
echo "缓存生成完成：$CACHE_FILE（共 $(wc -l < "$CACHE_FILE") 个可执行文件）"
